package gamefw.uiplugin;

import gamefw.gameplugin.AbstractGameLogic;


/**
 * A factory for creating User Interface related objects.
 * This concrete implementations of this factory will be called by the
 * framework to create all user interface related components.
 */
public interface IUIAbstractFactory {

	/**
	 * Creates the UI resource properties object
	 * 
	 * @return reference to the UI resource properties object 
	 */
	public IUIResourceProperties createUIResourceProperties();
	
	/**
	 * Initialize the UI platform if needed.
	 * For Example, if the UI plugin is built on a GUI framework,
	 * Show up the main frame with appropriate frame size.
	 */
	public void initialize(AbstractGameLogic gameLogic);

	/**
	 * Creates the input manager.
	 * 
	 * @return reference to the input manager
	 */
	public IInputManager createInputManager();
	
	/**
	 * Creates the output manager.
	 * 
	 * @return reference to the output manager
	 */
	public IOutputManager createOutputManager();
	
	/**
	 * Creates a new VisualResource.
	 *
	 * @param visualResourceName the visual resource name
	 */
	public IVisualResource createVisualResource(String visualResourceName);
}
